Pandas DataFrame 的 iloc[0] 與 iloc[[0]]

在寫分類器的時,看到別人的範例裡寫了這樣一段:DataFrame.iloc[[0]],他在[]裡面放入[0]而不是單純的0。

覺得這個取出方法有點神祕,究竟跟DataFrame.iloc[0]有什麼區別呢?

在這邊做個紀錄,順便給pandas.DataFrame的操作方法做個筆記。

參考資料和部分程式碼來源:10 Minutes to pandas - pandas 0.18.0 documentation。

運行環境為 Python 3.5 + Pandas 0.18。

#! /usr/bin/python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

# 先建立一個 DataFrame

dates = pd.date_range('20150328', periods=10)   # 日期序列

df = pd.DataFrame(np.random.randn(10, 5), index=dates, columns=list('ABCDE'))

# 各種觀察角度

print(df.index)         # 列出每一個 row 的 index 標籤

print(df.columns)       # 列出每一個 column 的標頭

print(df.values)        # 除去 index 與 column headers 後的數值陣列(np.array)

print(df.describe())    # 根據每一個 column 描述其資料性質(count, mean, std, ...)


# Selection: 直接取出

print(df['A'])          # 這樣會列出整個 DF 的 column 'A'

print(df[0:5])          # 列出 df 的 0, 1, 2, 3, 4 rows

print(df[[0, 1, 2]])    # 列出 df 的 0, 1, 2 三個 columns


# Selection: 使用 .loc 可以做更精細的選出資料

print(df.loc[dates[0]])                           # 根據 row 的 label 選擇

print(df.loc['20140103':'20140105', ['B', 'C']])  # 根據 row labels 和 column names 選擇


# Selection: 使用 .iloc 就可以用 numpy.array/python array 的方式來操作 pandas.DataFrame 

print(df.iloc[3])        # 取出第四個 row

print(df.iloc[0:2, 2:4]) # 取出一個區塊 (row_idx=0, 1 and col_idx=2, 3) 

print(df.iloc[1:4, :])   # 根據 row index 選擇

print(df.iloc[:, 1:3])   # 根據 col index 選擇


# Selection: .iloc[0] 和 .iloc[[0]] 的差別

print(type(df.iloc[0]))   # pandas.core.series.Series

print(type(df.iloc[[0]])) # pandas.core.frame.DataFrame

其實 .iloc[0] 和 .iloc[[0]] 的差別就是一個取出的型態是 Series ,另一個是 DataFrame。